﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UtilityExtensions;
using DAL;

namespace BOL
{
      [Serializable]
    public class OrdenCompraItemInfo
    {

          public void LoadFromComparativoItemSelecPrv(ComparativoItemSelecPrv item, bool InclIGV, decimal IGV)
          {

              this.idInternal = Parametros.GenerarID();
              this.idComparativoItemSelecPrv = item.idInternal;
              this.idInsumo = item.ComparativoItem.EstructuraCostoItem.idInsumo.Value;
              this.Descripcion = item.ComparativoItem.descripcion;
              this.codigo = item.ComparativoItem.codigo;
              this.unidad = item.ComparativoItem.unidad;
            


              this.SetTotales((item.cantidad.Value - item.cantidadUso.Value), 
                              item.precio.Value,
                              item.precio.Value,
                            (item.total.Value - item.totalUso.Value),
                            (item.total.Value - item.totalUso.Value),
                            IGV,
                            InclIGV);

             this.CantidadDisp = (item.cantidad.Value - item.cantidadUso.Value);

              this.subMontoDisp = this.subMonto;
              this.subMontoDispIGV = this.subMontoIGV;
              
              this.descuento = 0;

              
          }

          /// <summary>
          /// de acuerdo alos valor ingresado en Incl IGV se totan los valores de los parametros ingresados
          /// 
          /// </summary>
          /// <param name="Cantidad"></param>
          /// <param name="precioInclIGV"></param>
          /// <param name="subMontoIGV"></param>
          /// <param name="subMonto"></param>
          /// <param name="IGV"></param>
          /// <param name="inclIGV"></param>
          public void SetTotales(decimal Cantidad,
                               decimal precioInclIGV,
                                decimal precioNoInclIGV,
                               decimal subMontoIGV,
                                decimal subMonto,
                                decimal IGV,
                                bool inclIGV)
          {
              if (inclIGV)
              {

                  this.subMontoIGV = subMontoIGV;
                  this.subMonto = this.subMontoIGV / (1+IGV/100);
                  this.precioInclIGV = precioInclIGV;
                  this.precioNoIGV = this.subMonto / Cantidad;
                  this.cantidad=Cantidad;
                  this.IGVItem = this.subMontoIGV - this.subMonto;


              }
              else
              {

                  this.subMonto = subMonto;
                  this.subMontoIGV = this.subMonto * (1 + IGV / 100); ;
                  this.precioInclIGV = this.subMontoIGV / Cantidad;
                  this.precioNoIGV = precioNoInclIGV;
                  this.cantidad = Cantidad;
                  this.IGVItem = this.subMontoIGV - this.subMonto;


              }
          }




          public void LoadFromOrdenCompraRetiradosCol(dbGestionDataContext _db, OrdenCompraItem item, bool InclIGV, decimal IGV)
          {

              this.idInternal = Parametros.GenerarID();
              this.idComparativoItemSelecPrv = item.idComparativoItemSelecPrv.Value;
              this.idInsumo = item.idInsumo.Value;
              this.Descripcion = item.Descripcion;
              this.codigo = item.codigo;
              this.unidad = item.unidad;

          
              
              
              this.SetTotales(item.GetCantidadDispWithOUT(_db),
                              item.precioInclIGV.Value,
                              item.precioNoIGV.Value,
                             item.GetMontoDispINCLIGVWithOUT(_db),
                             item.GetMontoDispNOIGVIGVWithOUT(_db),
                             IGV,
                             InclIGV);
              
             
              this.CantidadDisp = this.cantidad;
              this.subMontoDisp = this.subMonto;
              this.subMontoDispIGV = this.subMontoIGV;
              this.IGVItem = this.subMontoIGV - this.subMonto;
              this.descuento = 0;


          }

          public OrdenCompraItemInfo()
          {
          }



          public OrdenCompraItemInfo(int idInternal,
                                   int idInsumo,
                                   int idOrdenCompra,
                                   string Descripcion,
                                   string unidad,
                                   string codigo,
                                   int? idComparativoItemSelecPrv,
                                   bool bitActivo,
                                   decimal cantidad,
                                   decimal subMonto,
                                   decimal subMontoIGV,
                                   decimal precioInclIGV,
                                   decimal precioNoIGV,
                                   decimal IGVItem,
                                   decimal descuento,
                                    string formulario)
          {
                 


              this.idInternal = idInternal;
              this.idInsumo = idInsumo;
              this.idOrdenCompra = idOrdenCompra;
              this.Descripcion = Descripcion;
              this.unidad = unidad;
              this.codigo = codigo;
              this.idComparativoItemSelecPrv = idComparativoItemSelecPrv;
              this.bitActivo = bitActivo;
              this.cantidad = cantidad;
              this.subMonto = subMonto;
              this.subMontoIGV = subMontoIGV;
              this.precioInclIGV = precioInclIGV;
              this.precioNoIGV = precioNoIGV;
              this.IGVItem = subMontoIGV - subMonto;
              this.descuento = descuento;

              this.formulario = formulario;
              
          }




          public OrdenCompraItemInfo(int idInternal,
                                    int idInsumo, 
                                    int idOrdenCompra,
                                    string Descripcion,
                                    string unidad,
                                    string  codigo,
                                    int? idComparativoItemSelecPrv,
                                    bool bitActivo,
                                    decimal cantidad,
                                    decimal subMonto,
                                    decimal subMontoIGV,                                   
                                    decimal precioInclIGV,
                                    decimal precioNoIGV,
                                    decimal IGVItem,
                                    decimal descuento,
                                    decimal subMontoDisp,
                                    decimal subMontoDispIGV,
                                    decimal CantidadDisp)
          {
             this.idInternal=idInternal;
             this.idInsumo=idInsumo;
             this.idOrdenCompra=idOrdenCompra;
             this.Descripcion=Descripcion;
             this.unidad=unidad;
              this.codigo=codigo;
             this.idComparativoItemSelecPrv=idComparativoItemSelecPrv;
             this.bitActivo=bitActivo;
             this.cantidad=cantidad;
             this.subMonto=subMonto;
             this.subMontoIGV=subMontoIGV;
             this.precioInclIGV=precioInclIGV;
             this.precioNoIGV=precioNoIGV;
             this.IGVItem=IGVItem;
             this.descuento=descuento;
             this.subMontoDisp=subMontoDisp;
             this.subMontoDispIGV=subMontoDispIGV;
             this.CantidadDisp=CantidadDisp;
          }


       public int idInternal {get; set;}
       public int idInsumo { get; set; }
       public int idOrdenCompra {get; set;}
       public string Descripcion {get; set;}
       public string unidad {get; set;}
       public string  codigo {get; set;}
       public int? idComparativoItemSelecPrv {get; set;}
       public bool bitActivo {get; set;}
       public decimal cantidad { get; set; }
       public decimal subMonto { get; set; }
       public decimal subMontoIGV { get; set; }
       public decimal precioInclIGV { get; set; }
       public decimal precioNoIGV { get; set; }
       public decimal IGVItem { get; set; }
       public decimal descuento { get; set; }
       public decimal subMontoDisp { get; set; }
       public decimal subMontoDispIGV { get; set; }
       public decimal CantidadDisp { get; set; }
       public string formulario { get; set; }


       private string _descuentoStr;
       private string _IGVItemStr;
       private string _cantidadStr;
       private string _CantidadDispStr;
       private string _subMontoStr;
       private string _subMontoIGVStr;
       private string _precioInclIGVStr;
       private string _precioNoIGVStr;

       public string descuentoStr
       {
           get
           {

               return this.descuento.ToString("N4");
           }
           set
           {
               _descuentoStr = value;
           }

       }
                            public  string IGVItemStr { 
           get
           {
               
               return this.IGVItem.ToString("N4");}
                                set
                                {
                                    _IGVItemStr = value;
                                }
       }
                            public  string cantidadStr { 
           get
           {
               
               return this.cantidad.ToString("N4");}
                                set
                                {
                                    _cantidadStr = value;
                                }
       }
                            public  string CantidadDispStr
       { 
           get
           {
               
               return this.CantidadDisp.ToString("N4");
               
           }
           set
           {
               _CantidadDispStr = value;
           }
       }
                            public  string subMontoStr
       {
           get
           {

               return this.subMonto.ToString("N4");
               
           }
           set
           {
               _subMontoStr = value;
           }
       }
                            public  string subMontoIGVStr
       {
           get
           {

               return this.subMontoIGV.ToString("N4");
           }
           set
           {
               _subMontoIGVStr = value;
           }
       }
                            public  string precioInclIGVStr
       {
           get
           {

               return this.precioInclIGV.ToString("N4");
           }
           set
           {
               _precioInclIGVStr = value;
           }
       }
                            public  string precioNoIGVStr
       {
           get
           {

               return this.precioNoIGV.ToString("N4");
           }
           set
           {
               _precioNoIGVStr = value;
           }
       }
          
         

    
    
              
    }

}
